תרגול מספר 10 חזרה ל מב חן לקוח מ ת וך: מ ועד א' ס מ סטר קיץ ת ש ס"ו מ ועד הב חינה: 20.9.06 קורס בסי סי נת וני ם סיגל א ל נקוה
SQL שאלה 28) 1 נק') נתונות תבניות של יחסים עבור בסיס-נתונים של חברה המספקת שירותי אינטרנט. בסיס-הנתונים מש מש למעקב אחר שירות טלפוני לתמיכה בלקוחות. client (c-no, c-name, c-address, username, hours-per-month) worker (w-name, w-job) telephone-call (report-no, t-date, t-hour, c-no, w-name, problem-description) further-treatment (report-no, w-name) solution-report (report-no, s-date, s-hour, w-name) היחס client (לקוח) מכיל מספרי לקוחות, שמות לקוחות, כתובותיהם, שם המשתמש במחשב והיקף השימוש באינטרנט, במספר שעות בחודש. c-no הוא מפתח היחס. היחס worker מכיל שמות עובדים ותפקידיהם. w-name הוא מפתח היחס. היחס telephone-call מכיל מידע על פנייה טלפונית של לקוח: t-hour ו- t-date הם היום והשעה שבהם היתה הפנייה, c-no הוא מספר הלקוח שהתקשר, w-name הוא העובד שקיבל את השיחה ו- report-no הוא מספר הדו"ח הנוגע לפנייה. problem-description הוא תיאור מילולי של הבעיה. report-no הוא מפתח היחס. היחס further-treatment מכיל מידע במידה ונדרש המשך טיפול בפנייה מסוימת. במקרה זה נרשם מספר הדו"ח של הפנייה המתאימה, והעובד הממשיך בטיפול (לאו דווקא מקבל השיחה). לכל היותר יהיה "המשך טיפול" אחד עבור כל פניה. report-no הוא מפתח היחס. היחס solution-report מכיל מידע על סיום הטיפול בכל פנייה, עם היום והשעה בהם דווח על סיום הטיפול, והעובד שדיווח על כך. (יכול להיות עובד שונה מהשניים הקודמים.) report-no הוא מפתח היחס. נסח שאילתות באמצעות פקודת SQLסטנדרטית כפי שנלמדה בכתה. עבור כל שאלה יש לספק פקודת (אין להשתמש ב- View ). SQLבודדת
SQL client (c-no, c-name, c-address, username, hours-per-month) worker (w-name, w-job) telephone-call (report-no, t-date, t-hour, c-no, w-name, problem-description) further-treatment (report-no, w-name) solution-report (report-no, s-date, s-hour, w-name) א. מצא כמה פני ות היו בנושא הקשור לתקלות במודם בשבוע האח רון. select count (*) from telephone-call where t-date between ( ו וח תאריכים המ גדיר את השבוע האחרון (ט and problem-description like %modem% ב. מצא ש מות לקוחות שמ ע ולם לא פנ ו לתמיכה. select c-name from client where c-no not in (select c-no from telephone-call) ג. מצא א ת שם הע ובד שענה למ ספר הפניות הטלפוני ות הרב ביותר. select w-name from telephone-call group by w-name having count (*) >= all (select count (*) from telephone-call group by w-name)
SQL client (c-no, c-name, c-address, username, hours-per-month) worker (w-name, w-job) telephone-call (report-no, t-date, t-hour, c-no, w-name, problem-description) further-treatment (report-no, w-name) solution-report (report-no, s-date, s-hour, w-name) ד. מצא א ת שם הלקוח שהתקשר אחרון, ואת ש עת קבלת הש יחה. select C.c-name, T.t-hour from client AS C, telephone-call AS T where C.c-no = T.c-no and T.hour >= all (select T1.hour from telephone-call AS T1 where T1.t-date = any (select max (t-date) from telephone-call)) ה. מצא שמות לקוחות שפנו לתמיכה טלפונית לפחות 10 פעמים בחודש פברואר 2006, והטיפול בכולן עדיין לא הושלם. (טיפול לא הושלם אם אין עבורו שורה ביחס (.solution-report בהנחה שיש לפחות עשרה שלא נשלם הטיפול בהם (ולא משנה מה עם פני ות נו ספ ות של אותו לקוח.) select C.c-name from client AS C, telephone-call AS T where C.c-no=T.c-no and T.t-date between 1/2/00 and 29/2/00 and not exists (select S.report-no from solution AS S where S.report-no = T.report-no) group by T.c-no having count (report-no) >= 10
SQL client (c-no, c-name, c-address, username, hours-per-month) worker (w-name, w-job) telephone-call (report-no, t-date, t-hour, c-no, w-name, problem-description) further-treatment (report-no, w-name) solution-report (report-no, s-date, s-hour, w-name) ו. כתוב שאילתא שהפלט שלה יכלול שלוש שורות שיפרטו: בכמה פניות טיפל עובד אחד, בכמה פניות טיפלו שני עובדים שונים באותה פנייה ושלושה עובדים שונים באותה פנייה (לפי ההסבר לעיל, מתועדים לכל היותר שלושה לכל פניה.) סופרים בכמה פניות טיפל עובד אחד בלבד, בכמה פניות טפלו שני עובדים ובכמה פניות טפלו שלושה עובדים שונים. מאחד י ם א ת של ו ש הת ו צ א ו ת: (select count (distinct report-no) as num into X from telephone-call as T, further-treatment as F, solution-report as S where T.report-no = F.report-no and F.report-no = S.report-no and T.w-name = F.w-name and F.w-name=S.w-name) union (select count (distinct report-no) from telephone-call as T, further-treatment as F, solution-report as S where T.report-no = F.report-no and F.report-no = S.report-no and ((T.w-name = F.w-name and F.w-name S.w-name) or (T.w-name = S.w-name and S.w-name F.w-name) or (T.w-name F.w-name and F.w=name = S.w-name)) union (select count (distinct report-no) from telephone-call as T, further-treatment as F, solution-report as S where T.report-no = F.report-no and F.report-no = S.report-no and T.w-name F.w-name and F.w-name S.w-name and T.w-name S.w-name )
π אלגב רה רל ציונית client (c-no, c-name, c-address, username, hours-per-month) worker (w-name, w-job) telephone-call (report-no, t-date, t-hour, c-no, w-name, problem-description) further-treatment (report-no, w-name) solution-report (report-no, s-date, s-hour, w-name) שאלה (12 2 נק') בהמשך לשאלה 1, ענה על השאלות הבאות בעזרת אלגברה רלציונית באמצעות ביטוי בודד: 1. הציגו את שמות כל הלקוחות שנענו בטלפון במהלך שנת 2006 על ידי עובד עם שם זהה לשמם. π c - name( σt date > 31/12/05 and t date < 1/1/07(client x c - name = w - nametelephone call)) "Shlomo σ 2. הציגו את זיהוי הפניות (report-no) הפתוחות שהתקבלו על ידי העובד Levi" ושעבורן נפתח טיפול המשך. report no( w name = " Shlomo Levy" and solution report. report no = null ( telephone call x telephone - call.report - no = further - treatment.report - nofurther - treatment) x telephone - call.report - no = solution - report.report - no solution - report) (
תרשים מח ל קו ת שאלה (18 3 נק') קבוצה העוסקת במחקר רפואי מנהלת בסיס-נתונים המכיל מידע על מאמרים בנושאים שהיא חוקרת. בסיס-הנתונים מכיל מידע על כתבי-העת בהם מתפרסמים המאמרים, כולל הכרך והעמודים; המחבר או המחברים של המאמר, והנושאים בהם הוא עוסק. מחבר לרוב שייך למוסד (אוניברסיטה, בית-חולים, חברת תרופות וכו'). כל מאמר עשוי להכיל אזכורים למאמרים אחרים (ציטוט של מאמרים אחרים), שחלקם מופיע בבסיס הנתונים, ויש לשמור מידע על אזכורים אלה (כולל מספר האזכורים באותו מאמר). חלק מהמאמרים משקפים מחקר שבוצע במוסדות אחרים (מאמרים חיצוניים), ומידע זה נשמר בבסיס-הנתונים; גם מאמרים שנכתבו על-ידי הקבוצה עצמה נשמרים בבסיס-הנתונים. לגבי מאמרים פנימיים אלה נשמר גם מידע על הגורם המממן את המחקר המשתקף במאמר. א. הצג תרשים מחלקות. ב. תרגם את תרשים המחלקות שתואר בסעיף א' לסכימה טבלאית. פרט את הטבלאות המופיעות בסכימה, את התכונות בכל טבלה, המפתחות הראשיים והמפתחות הזרים. יש להקפיד על נרמול הסכימה לפי.BCNF (0,n) אזכור מאמרים (0,n) מא מר שם{שם מאמר, שם כתב עת,כרך} עמודים{מעמוד, משך} סט מחברים[מחבר] סט נושאים סט אזכורים{[מאמר],כמות} סט מאוזכר ע"י {[מאמר],כמות} מא מר פ ני מ י ג ו רם מממ ן מא מר חי צונ י שם המ וסד מחברי מאמר ים (1,n) (0,n) X מחבר מ"ז שם שייך למוסד סט מאמרים [מאמר] מחברי מאמ ר ים מאמר ים חיצו נים מאמר ים פנימ י ים שייך למוסד שם מ "ז מחברים מאמרים משך מעמוד כרך שם כתב עת שם מאמר נושאי מאמר נושא שם כתב עת כרך שם מאמר שם מאמר שם כתב עת כרך מ"ז מחבר שם מאמר שם כת ב ע ת כרך שם המ וסד שם מאמר שם כת ב ע ת כרך ג ו רם מממ ן אי זכור ים מאמר מאזכר כרך מאזכר כתב עת מאזכר שם מאמר מאוזכר כרך מאוזכר כתב עת מאוזכר כמות
תרשים י שויו ת קשרים (ERD) שם_חבר ה comp_name שאלה (18 4 נק') איגוד חברות הביטוח החליט להקים בסיס נתונים אשר יעקוב על שיפוי המבוטחים כתוצאה מתאונות הדרכים. חברות הביטוח מבטחות את כלי רכב כנגד נזקי תאונות דרכים. המערכת תאחסן נתונים לגבי הרכבים המבוטחים (מס' רישוי ויצרן), התאונות שהתרחשו (תאריך התאונה, מקום התאונה הרכבים והנהגים המעורבים), חברות הביטוח (שם החברה ומספר הטלפון שלה) והתשלומים (סכום התשלום, תאריך התשלום ועבור איזה רכב ותאונה השיפוי בוצע). בנוסף המערכת תעקוב אחר כל היסטורית הבעלויות של הרכב (כלומר מי הם הבעלים של הרכב, החל מאיזה תקופה ועד איזה תקופה). הפרטים על אנשים פרטיים יכלולו שם פרטי ומשפחה, ת.ז. וכן מספר טלפון. א. יש לתכנן תרשים ישויות קשרים (ERD) מפורט המתאים לתיאור הבעיה. במידת הצורך תן דעתך על קשרי,ISA ישויות חלשות וקשרים רפלקסיביים. נסה ככל האפשר להיצמד לתיאור הבעיה לצורך פיתוח המודל. אם נדרש להניח דבר מה שאינו מופיע מפורשות בתיאור שלעיל, ציין זאת בניתוח. ב. תרגם את ה- ERDשתואר בסעיף א' לסכימה טבלאית. פרט את הטבלאות המופיעות בסכימה, את התכונות בכל טבלה, המפתחות הראשיים והמפתחות הזרים. יש להקפיד על מתן שמות תקניים ועל נרמול הסכימה לפי.BCNF חברות ב י ט וח רכבים נהגים שם ח ברה מס ' רישוי יצרן שנת יצור דגם מ "ז שם כתובת טלפון מש תתפי תאונ ה בעלוי ות רכב י ם שנת_י צו ר year מס ' רישוי מס'_רישו י reg_no. ר כ ב vehicle יד hand יצ רן make ב על ות ה תחל ה start מס ' דו"ח תאונה ס כ ום amount ד גם model סי ום end תאו נ ה accident נ ה ג י ר כ ב ים המשתתפים בתא ו נ ה מקום location אדם person מ"ז id חברת_ב י טוח insurer תשלום payment מס'_דו"ח report_no. שם name מס ' רישוי תאר יך date טלפון כתובת telephone address מ"ז נהג מ "ז בעלים יד התחלה סיום תאונ ות מס ' דו"ח תאריך מקום תשלומים על תאונות מס ' רישוי מס ' דו "ח חברת ביטוח סכום
נרמו ל שאלה (12 5 נק') נתון עם קבוצת התלויות הבאה: א. קבע את כ ל המ פתחות האפשריים לטבלה ה נ"ל. CEH) CH,DH,ABH, DEH מכיל את CH שהינו מינימאלי יותר) ב. האם קיים פירוק BCNF לבעיה הנ"ל שהוא אינו משמר תלויות אבל משמר מידע? אם כן הצג פירוק כזה. קיים פירוק כזה: למשל:עבור ABCE,ABDHשבוצע לפי התלות הראשונה, לא ניתן לשחזר את התלויות: C BDE, CE D, D C החלוקה עומדת בBCNF כאשר נגדיר לABCE שני מפתחות אפשריים: AB ו- BE, וכך נוכל לשמור את שתי התלויותAB CE, ו-.BE AC
אופט י מי ז ציה שאלה (12 6 נק') נתונה סכימה טבלאית למעקב אחר פעילות העובדים בפרויקטים: הערה: השדות אשר מהווים את המפתח הראשי של טבלה מסומנים עם קו תחתון. הקיצור SSN מתייחס ל- Social Security Number (מס' ת.ז.). להלן נתונה שאילתה ב- SQL, המתייחסת לסכימה הנ"ל. (SELECT DISTINCT PNUMBER FROM PROJECT, DEPARTMENT, EMPLOYEE WHERE DNUM=DNUMBER AND MGRSSN=SSN AND LNAME= Smith ) UNION (SELECT DISTINCT PNUMBER FROM PROJECT, WORKS_ON, EMPLOYEE WHERE PNUMBER=PNO AND ESSN=SSN ANDLNAME= Smith ) EMPLOYEE Col name Col Type Not null References FNAME CHAR(15) NOT NULL LNAME CHAR(15) NOT NULL SSN CHAR(9) NOT NULL BDATE DATE ADDRESS CHAR(30) SEX CHAR SALARY DEC(10,2) DEPTNO INT NOT NULL DEPARTMENT(DNUMBER) DEPARTMENT Col name Col Type Not null References DNAME CHAR(15) NOT NULL DNUMBER INT NOT NULL MGRSSN CHAR(9) NOT NULL EMPLOYEE(SSN) MGRSTARTDATE DATE PROJECT Column name Column Type Not null References PNAME CHAR(15) NOT NULL PNUMBER INT NOT NULL PLOCATION CHAR(15) DNUM INT NOT NULL DEPARTMENT(DNUMBER) WORKS_ON Column name Column Type Not null References ESSN CHAR(9) NOT NULL EMPLOYEE(SSN) PNO INT NOT NULL PROJECT(PNUMBER) HOURS DEC(3,1) NOT NULL
אופט י מי ז ציה א. שרטט עץ שאילתא ראשוני. ב. שרטט עץ שאילתא יעיל ככל שניתן תוך שימוש בכללי אופטימיזציה היוריסטית. ג. כתב את הביטוי האלגברי המתאים לכל אחד מהעצים. πp number UπP ( π number dnumber ( π pno ( π ( π ssn( ssn( σ σ lname = ' smith' lname = ' smith' π pnumber( Uπ σ pnumber( employee)) x employee)) x dum = dnumber and mgrssn = ssn and lname = ' smith' σ pnumber = pno and essn = ssn and lname = ' smith' mgrssn = ssn( essn = ssn( π π mgrssn, dnumber essn, pno ( department))) x ( works _ on))) x ( ptoject x department x employee)) ( ptoject x works_on x employee)) pnumber = pno dnumber = dnum ( π ( π pnumber, dnum pnumber, dnum (project)) (project))
בהצ לחה ולהתראות!
דוגמאות לתרגול עצמי
אלגב רה ט ב לאית נסח את השאילות הבאות באלגברה של יחסים. השאילתות מתייחסות לבסיס הנתונים שתואר בשקף קודם: ערוך רשימה של תחנות שבהן נמדדו מעל 100 מ"מ גשם ביום אחד, וציין כמה מ"מ ירדו שם באותו יום. Πs_id, amount (σamount > 100 (rainfall)) מצא שמ ו ת מקומות שבהם מ עולם לא י רדה הטמ פרטורה מתחת ל 20 - מ עלות. Πplace (station*(πs_id (station) - Πs_id (σmin<20 (temperature)))) ניסוח זה מניח שייתכנו כמה תחנות באותו מקום,(place) ואז צריך לבודד את התחנות שבהם לא ירדה הטמפרטורה, ורק אז לצרף ל- station ולמצוא את המקום. אם מניחים שיש התאמה אחד-לאחד בין תחנות ומקומות אזי מספיק לרשום: Πplace(station) - Πplace (σmin<20 (temperature*station)) מצא מקומות ותאריכי ם שבהם הגיעה הטמפר טו רה ל 30 - מעלות וגם ירד גש ם באותו י ום. Πplace,date (σmax >=-30 min<=-30 amount > 0 (temperature* rainfall *station)) כאן אפשר להבין "מקומות" בשאלה גם כמזהי תחנות, ואז לא צריך לצרף ל- station, והתשובה הסופית מתקבלת מהטלה על.s_id מצא מקומות ותאריכים שבהם נמדדה טמפרטורת מקסימום נמוכה יותר מטמפרטורת המינימום שנמדדה למחרת. Πt1.s_id, t1.date (σt1.max<t2.min t1.s_id=t2.s_id t1.date=t2.date-1(ρt1 (temperature) ρt2 (temperature))) (כאן לקחתי את ההנחה המקילה לעיל, ש"מקום" יכול להיות מזהה תחנה. אחרת, צריך לצרף את התוצאה ל- station לפני ההטלה.) מצא היכן ומתי נמדד הפער הגדול ביותר בין טמפרטורת המקסימום וטמפרטורת המינימום Πs_id, date(temperature) - באותו יום. Π t1.s_id, t1.date (σ( t1.max -t1.min) < (t2.max -t2.min) (ρ t1 (temperature) ρt2 (temperature)))
נרמו ל טיסות(מספר טיסה,מס' מטוס,תאריך טיסה, סוג מטוס, מספר נוסעים אפשרי במטוס, ת.ז טייס,שם טייס) האם טבלה זו שומרת על חוקי הנרמול? במידה וכן, נמקו. במידה ולא, יש להראות לאילו טבלאות יש לפרק טבלה זו. פתרון: סוג מ טו ס מס' נוסעים אפשרי במטוס ת.ז טייס שם טייס מס' מטוס מס' טיסה תאריך ט י סה יש לפרק לטבלאות הבאות: מטוסים (מס' מטוס, סוג מטוס, מס' נוסעים אפשרי במטוס) טיסות (מס' טיסה, תאריך טיסה, ת.ז טייס, מספר מטוס) טייסים (ת.ז טייס, שם טייס)
SQL נתונה הסכמ ה הבאה:,birthday,first_name,personal_number last_name) Soldier unit_number,recruitment_date (nickname,salary,personal_number) Commander,end_of_basic training_date,personal_number ) Simple_ Soldier (release_date,estimated_release_date (foundation_date,unit_name,unit_number) Units,unit_number,personal_number) Commander _Units ( job,finish_date,start_date,finish_date, begining_hour,start_date,mission_number) Mission (personal_number,location_number,mission_desc,finish hour (mission_number, personal_number)mission- Soldier (location_type, location_name,location_number) Locations
ענה על ה שאלות הבאות בעזרת שפת :SQL 1.מציאת המבצעים עליהם פיקד amiram levin כאשר היה מפקד יחידה, 221 על השאילתא להציג את מספר המבצעים, תאריכיהם ומיקומם. SELECT mission.date,location.location_name,count(mission_date) FROM Mission AS M,Location AS L, Soldier AS S, Commander_Units AS CU WHERE M personal_number = CU.personal_number AND CU.personal_number=S.personal_number AND M.location_number=L.location_number CU.unit_number=221AND S.personal_name=amiram AND S.last_name=levin 2. שמ ות המפק ד י ם א שר פ י ק ד ו על י ח י דה כ לשה י י ו תר מפעם אחת במהלך השנ י ם. SELECT Soldier.personal_name, Soldier.last_name FROM Soldier AS S, Commander_Units AS CU,Unit AS U WHERE S.personal_number=CU.personal_number AND CU.unit_number=U.unit_number GROUP BY CU.personal_number, U.unit_number HAVING count (start_date)>1 3. מספר החיילים הממוצע שהשתתפו במבצעים שהתקיימו בתנאי שטח מסוג.mountain SELECT AVG( *) From (Select COUNT(Soldier.personal_number)) FROM Soldier AS S, Mission AS M, Mission- Soldier AS MS, Location AS L WHERE MS.personal_number=S.personal_number AND M.mission_number=MS.mission_number AND M.location_number=L.location_number AND L.location_type=mountain GROUP BY M.mission_number)
4. ש ם המפקד שפיקד על הכי הרבה יחידות ש ונ ות. SELECT Soldier.personal_name, Soldier.last_name FROM Soldier AS S, Commander_Units AS CU,Unit AS U WHERE S.personal_number=CU.personal_number AND CU.unit_number=U.unit_number GROUP BY CU.personal_number HAVING COUNT DISTINCT (unit_number)>=all (SELECT COUNT DISTINCT(unit_number) FROM Soldier AS S, Commander_Units AS CU,Unit AS U WHERE S.personal_number=CU.personal_number AND CU.unit_number=U.unit_number) 5. מ ספר החיילים הפשו טי ם שהיו א מו רים להשתחרר ולבס ו ף האריכו את ש י רותם ואת העלות ש ל הארכת שירות ז ה לצה"ל אם כל י ום קבע ע ולה לצבא. 300 SELECT COUNT(Simple_Soldier.personal_number), SUM(300*( S1.release_date-S1. estimated_ release_date)) FROM Simple_Soldier AS S1 WHERE S1.release_date>S!. estimated_ release_date SELECT Units.unit_number, Units.unit_name FROM Units AS U WHERE foundation_date>=all SELECT Units. foundation_date ( FROM Units AS U) 6. מצא מ י היא היח ידה הותיקה בצה"ל.
אופט י מי ז ציה נתונה שאילתא: הצגת פרטי העובדים אשר גרים באותה עיר בה הם עובדים ומספר החניות בחנות העבודה שלהם גדול מ- 300. עבור כל עובד יש להציג את מ"ז, עיר המגורים, ושם החנות בה הוא עובד. SELECT E.ID E.City, S.Name FROM Stores as S, Employee as E WHERE S.Store_ID=E.Works_In_Store and E.City=S.City and Num_Of_Parking_Places>300; 1.הצג עץ שאילתא ראשוני 2.הצג עץ שאילתא אופטימאלי
תרשים ERD ומעבר למודל הטבלאי מנורמל נתונות תבניות של יחסים המייצגות בסיס-נתונים של מכון מטאורולוגי: station (s_id, place) calendar (date, day, month, year) rainfall (s_id, date, amount) temperature (-s_id, date, max, min) היחס station מכיל מידע על התחנות השונות: לכל תחנה יש מספר תחנה (s_id) ומיקום.(place) s_id הוא מפתח ראשי של היחס. היחס calendar מכיל מידע על לוח השנה: date הוא התאריך, והתכונות הבאות מכילות את מרכיבי התאריך הזה בנפרד: day הוא היום בחודש, month הוא שם החודש ו- year הוא השנה. date הוא המפתח הראשי של היחס. היחס rainfall מכיל מידע על כמויות הגשמים שנמדדו בתחנות השונות בתאריכים מסוימים: s_id הוא מספר התחנה, date הוא תאריך המדידה ו- amount הוא כמות הגשמים שנמדדה באותה תחנה בתאריך האמור (במילימטרים). צירוף התכונות s_id, date הוא מפתח ראשי של היחס. היחס temperature מכיל מידע על הטמפרטורה שנמדדה בתחנות השונות בתאריכים שונים: s_id הוא מספר התחנה, date הוא תאריך המדידה, max הוא טמפרטורת המקסימום שנמדדה באותו תאריך ו- min טמפרטורת המינימום. צירוף התכונות s_id, date הוא מפתח ראשי של היחס. שרטט דיאגרמת E-R לתיאור מערכת זו:
תרשים ERD ומעבר למודל הטבלאי מנורמל במערכת המידע של רשת שיווק מאוחסן מידע לגבי כל אחד מהמוצרים הנמכרים ברשת: שם, תיאור, סוג אריזה, משקל, יצרן, ספק, קוד מוצר, מחיר ליחידה. כמו כן נשמר מידע לגבי הכמות המצויה מכל מוצר בכל אחד מסניפי הרשת. מערכת המידע מתעדת את כל הקניות העוברות בקופה: תאריך ושעה, המוצרים שנרכשו והכמות של כל אחד, סכום הקניה הכולל ושיטת התשלום. שרטט דיאגרמת ישויות-קשרים לתיאור מערכת זו. ציין בה מידות ריבוי ואילוצי השתתפות, וציין את המפתחות הראשיים של טיפוסי הישויות וטיפוסי הקשרים. המר דיאגרמה זו לטבלאות.
הערות ל דיאגרמה: התכונות "תאריך" ו"שעה" בטיפוס הישויות "סל קניות" הן מזהה פנימי - צריך להיות מסומן בקו שבור. "מוצר" מכיל את כל התכונות שפורטו לגביו, בלי להפריד ספק, יצרן, סוגי אריזות וכו' כטיפוסי ישויות נפרדים עם קשרים אליו, כיוון שהמערכת מתמקדת במעקב קניות. אפשר כמובן להפריד "מוצר" כסוג, עם קשרים לסוגי אריזות שונים וכו'. "סכום הקניה" הוא תכונה מחושבת, כיוון שהיא נובעת מהמחיר ליחידה * הכמות בתוך כל סל. אבל לא יהיה נכון לבטא "כמות במלאי" כתכונה מחושבת, כיוון שהיא מבוססת לפחות על נתון התחלתי שאינו בא משום מקור אחר. ציינתי אילוץ השתתפות רק מסל למוצר - כאילוץ ההכרחי ביותר: אין סל קניות שאינו מכיל מוצר כלשהו, אחרת אין סיבה שייכנס למערכת. אפשר לקבוע גם אילוצי השתתפות מסניף למוצר - זה כבר עניין של הנחות על המערכת. כמובן שיש אילוץ השתתפות מסל קניות לסניף - זה חלק מהיות הסל טיפוס ישויות חלש. (אם מוסיפים תכונה מזהה חד ערכית לסל, אפשר שלא להציג אותו כחלש, למרות שזה הייצוג המתאים ביותר. אם אין נותנים מזהה חד ערכי, או שרושמים את הסניף כתכונה, זו שגיאה.)
דו ג מא נוס פת: מטבח מוסדי מנהל מערכת מידע הכוללת מתכונים, וכן מידע תזונתי וכלכלי הנוגע למזון. במערכת נשמר מידע על מצרכי מזון שונים, הכולל מידע על הרכבם התזונתי (חלבונים, פחמימות, ויטמינים שונים וכו') וערכם הקלורי; על טמפרטורת האחסון המתאימה לכל מצרך, ותאריך מרבי לאחסון עד לשימוש. כמו-כן נשמר מידע על ספקים מהם ניתן לרכוש את המצרכים, באילו אריזות ובאילו מחירים. מתכונים כוללים רשימת מצרכים הכלולה בהם, עם הכמות מכל מצרך, שיטות הבישול המשתתפות בהכנת המתכון, משך ההכנה הכולל, סיווג המנה המתקבלת (מנה עיקרית, מנה ראשונה, קינוח וכו'). כמו-כן נשמר במערכת מידע המתעד את המתכונים שהוכנו בכל יום, לכל ארוחה. כמה מנות הוכנו, כמה נצרכו בפועל, הערות על תקלות. שרטט דיאגרמת ישויות-קשרים לתיאור המערכת, הכוללת את כל המידע והאילוצים הדרושים. המר את הדיאגרמה לטבלאות. שיטת בישול שם שיטה מרכיב תזונתי שם מרכיב משתמש ב כמות מרכיב שם מצרך שם מתכון טמפ' אחסון סיווג מתכון מכיל מצרך מזון משך אחסון מרבי משך הכנה הכנה מס' מנות שהוכנו מס' מנות שנצרכו מספק קלוריות ליחידה יחידה אפיינית ביצוע ארוחה מחיר בוקר /צהרים/ערב תאריך ספק אריזה
הערות ל דיאגרמה: - אילוץ ההש תתפות המסומן הוא ההכרחי ביותר. אפשר להניח שיש עו ד. לגבי התכונות של מצרך מזון - הצגתי כאן משך אחסון מרבי כתכונה קבועה. בהינתן תאריך הקניה - אפשר לדעת תפוגה. בשאלה נאמר כאילו נשמר "תאריך מרבי" שזה לא מספיק ברור, אבל אם אין שומרים מידע על כל שקית חלב בנפרד (כדוגמה), אזי אין דרך אחרת. ייצוג המבטא כל מצרך בפני עצמו (כגון שקית חלב) הוא גם לגיטימי למערכת כזו, אבל אז דרושות עוד תכונות כמו תאריך קניה, כמות בקניה וכו'.